package com.tedu.api.thread;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Lambda表达式--> ()->{}【接口/抽象类--匿名内部类】
 *                       【集合遍历--匿名内部类】
 *Collection---->List：存重复元素并且有序【保存数据结构一致】
 *               Set:存无序并却不重复【保存数据结构一致】
 *               Queue：队列结合业务
 *
 *Map------------->HashMap:键值对存值
 *
 */
    public class LambdaDemo {
    @Test
    public void testList(){
        //List集合：保存元素
        List<String> list=new ArrayList<>();
        list.add("白洋淀");
        list.add("正定古城");
        list.add("河头老街");
        list.add("白石山");
        //集合3种遍历方式：普通for、增强for、支持forEach方法
        for(String str:list){
            System.out.println("增强for:"+str);
        }
        //支持forEach方法：遍历集合元素
        // Consumer针对List集合接口:功能获取list集合元素
        //accept()  获取List集合的所有元素

        list.forEach(new Consumer<String>(){

            public void accept(String s) {
                System.out.println("consumer接口遍历方案："+s);
            }
        });
        //支持forEach方法：遍历集合元素【Consumer  匿名内部类】
        //编写Lambda表达式写法
        list.forEach(s-> System.out.println("Lambda遍历方案："+s));
    }
    @Test
    public  void testMap(){
       //创建Map集合:键值对
       Map<Integer,String> map=new HashMap<>();
       map.put(1,"唐山");
       map.put(2,"石家庄");
       map.put(3,"秦皇岛");
       map.put(4,"邯郸");
       //遍历集合：普通for、增强for、forEach(BiConSummer接口--匿名内部类)
        //键值对-->一组Entry对象
        //BiConSummer接口--获取每组Entry对象---accept()获取Entry对象
       map.forEach(new BiConsumer<Integer, String>() {
           @Override
           public void accept(Integer integer, String s) {
               System.out.println("键："+integer+"值："+s);
           }
       });



        // 使用Lambda表达式
        map.forEach((i,s)-> System.out.println("lambda值："+s));
    }
    /**
     * 作业：1.使用Lambda表达式完成Thread线程创建
     *      2.使用Lambda表达式完成Runnable线程创建
     *      3.IO流--File类：listFile(FileFilter接口)
     *      目标：【io包下FileAPI类】实现使用Lambda表达式完成
     *      4.IO流--File类：listFile(Filter接口)【2行代码】
     *      目标：【io包下FileAPI类】实现使用lambda表达式完成
     *      5.集合：改成lambda写法
     *      目标：【list包下ListAPI类下单元测试：testComparator()】
     *      LambdaDemo类下--完成作业
     *      @LambdaHomeWork1
     *      @LambdaHomeWork2    ...
     *     中午12前
     */
    @Test
    public void LambdaHomeWork1(){
        //使用Lambda表达式完成 Thread线程创建
        //Thread类 Java定义线程类--具备启动start---
        //Thread类封装Runnable类--线程run运行
        Thread t1=new Thread(()->{for(int i=0;i<1000;i++){
            System.out.println("给我学呀，One楞One楞的");
        }});
           t1.start();
        }


    @Test
    public void LambdaHomeWork2(){
        Runnable mr1=()->{for(int i=0;i<1000;i++){
            System.out.println("时间不等人，但我等你");
        }};
        //2.创建Thread线程类--start()
        Thread t2=new Thread(mr1);
        //3.启动线程
        t2.start();
    }
    @Test
    public void LambdaHomeWork3(){
        FileFilter my=new FileFilter() {

            public boolean accept(File pathname) {
                String name=pathname.getName();   //文件夹：src  字符串
                System.out.println("过滤出来文件夹名字是："+name);
                return pathname.getName().startsWith("s");
            }

        } ;
    }
    @Test
    public void LambdaHomeWork4(){
        for(File f:new File("."+File.separator).listFiles((pathname)->{return pathname.getName().startsWith("b");})){
            System.out.println("遍历后过滤完成："+f);
        }
    }
    @Test
    public void LambdaHomeWork5(){
        List<String>list=new ArrayList<>();
        list.add("洁世一 ");
        list.add("蜂乐回");
        list.add("千切豹马");
        Comparator<String>com=Comparator.comparingInt(String::length);
        Collections.sort(list,com);
        System.out.println("排序后的集合："+list);

    }
    }

